package com.rongxunwu.netty.hello;

import io.netty.handler.codec.marshalling.*;
import org.jboss.marshalling.MarshallerFactory;
import org.jboss.marshalling.Marshalling;
import org.jboss.marshalling.MarshallingConfiguration;

/**
 * TODO
 *
 * @author rongxun.wu01
 * @version 1.0
 * @date 2021/11/1 15:20
 */
public final class MarshallingCodeCFactory {


/**

 * 创建Jboss Marshalling解码器MarshallingDecoder

 * @return MarshallingDecoder

 */

public static MarshallingDecoder buildMarshallingDecoder() {
//首先通过Marshalling工具类的精通方法获取Marshalling实例对象 参数serial标识创建的是java序列化工厂对象。

final MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");

//创建了MarshallingConfiguration对象，配置了版本号为5

final MarshallingConfiguration configuration = new MarshallingConfiguration();

        configuration.setVersion(5);

        //根据marshallerFactory和configuration创建provider

        UnmarshallerProvider provider= new DefaultUnmarshallerProvider(marshallerFactory, configuration);

        //构建Netty的MarshallingDecoder对象，俩个参数分别为provider和单个消息序列化后的最大长度

        MarshallingDecoder decoder =new MarshallingDecoder(provider, 1024 * 1024);

        return decoder;

        }



/**

 * 创建Jboss Marshalling编码器MarshallingEncoder

 * @return MarshallingEncoder

 */

public static MarshallingEncoder buildMarshallingEncoder() {
final MarshallerFactory marshallerFactory =Marshalling.getProvidedMarshallerFactory("serial");

final MarshallingConfiguration configuration = new MarshallingConfiguration();

        configuration.setVersion(5);

        MarshallerProvider provider =new DefaultMarshallerProvider(marshallerFactory, configuration);

        //构建Netty的MarshallingEncoder对象，MarshallingEncoder用于实现序列化接口的POJO对象序列化为二进制数组

        MarshallingEncoder encoder =new MarshallingEncoder(provider);

        return encoder;

        }

        }
